package com.zeus.monitor;

import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Test;

import java.util.concurrent.TimeUnit;

/**
 * Timer(计时器)同时测量一个特定的代码逻辑块的调用(执行)速度和它的时间分布。
 * 简单来说，就是在调用结束的时间点记录整个调用块执行的总时间，
 * 适用于测量短时间执行的事件的耗时分布，例如消息队列消息的消费速率。
 */
public class PrometheusTime {

    @Test
    public void testTimerSample() {
        Timer timer = Timer.builder("timer")
                .tag("timer", "timersample")
                .description("timer sample test.")
                .register(new SimpleMeterRegistry());

        for (int i = 0; i < 2; i++) {
            timer.record(() -> {
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {

                }
            });
        }
        System.out.println(timer.count());
        System.out.println(timer.measure());
        System.out.println(timer.totalTime(TimeUnit.SECONDS));
        System.out.println(timer.mean(TimeUnit.SECONDS));
        System.out.println(timer.max(TimeUnit.SECONDS));
    }

    /**
     * Summary
     * Summary(摘要)用于跟踪事件的分布。它类似于一个计时器，但更一般的情况是，
     * 它的大小并不一定是一段时间的测量值。在micrometer中，对应的类是DistributionSummary，
     * 它的用法有点像Timer，但是记录的值是需要直接指定，而不是通过测量一个任务的执行时间
     */
    @Test
    public void testSummary() {
        DistributionSummary summary = DistributionSummary.builder("summary")
                .tag("summary", "summarySample")
                .description("summary sample test")
                .register(new SimpleMeterRegistry());
        summary.record(2D);
        summary.record(3D);
        summary.record(4D);

        System.out.println(summary.count());
        System.out.println(summary.measure());
        System.out.println(summary.max());
        System.out.println(summary.mean());
        System.out.println(summary.totalAmount());
    }




}
